package com.example.deepseek.service;

import com.example.deepseek.model.DocumentChunk;
import java.util.List;
import java.util.Map;

public interface VectorStoreService {
    
    /**
     * 添加文档到向量存储
     * 
     * @param id 文档ID
     * @param content 文档内容
     * @param embedding 文档向量表示
     * @param metadata 文档元数据
     */
    void addDocument(String id, String content, float[] embedding, Map<String, Object> metadata);
    
    /**
     * 批量添加文档
     * 
     * @param ids 文档ID列表
     * @param contents 文档内容列表
     * @param embeddings 文档向量表示列表
     * @param metadatas 文档元数据列表
     */
    void addDocuments(List<String> ids, List<String> contents, List<float[]> embeddings, 
                     List<Map<String, Object>> metadatas);
    
    /**
     * 通过向量相似度搜索文档
     * 
     * @param queryEmbedding 查询向量
     * @param limit 最大返回数量
     * @return 相关文档块列表，按相似度排序
     */
    List<DocumentChunk> searchSimilar(float[] queryEmbedding, int limit);
    
    /**
     * 通过关键词搜索文档
     * 
     * @param query 查询关键词
     * @param limit 最大返回数量
     * @return 相关文档块列表，按相关度排序
     */
    List<DocumentChunk> searchByKeyword(String query, int limit);
    
    /**
     * 混合搜索（结合向量和关键词）
     * 
     * @param query 查询文本
     * @param queryEmbedding 查询向量
     * @param limit 最大返回数量
     * @return 相关文档块列表，按混合分数排序
     */
    List<DocumentChunk> hybridSearch(String query, float[] queryEmbedding, int limit);
    
    /**
     * 清除所有文档
     */
    void clearAll();
    
    /**
     * 获取存储的文档总数
     * 
     * @return 文档数量
     */
    int getDocumentCount();


}